﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
using Microsoft.Practices.EnterpriseLibrary.Common;
using System.Configuration;
using Insifo.BE.Seg;

namespace Insifo.DL.Seg
{
    public class DLConcepto : DLTransaction, IDLTransaccion<BEConcepto>
    {
        #region  Members

        /// <summary>
        /// Método obtiene los Conceptos
        /// <returns>Devuelve un DataSet</returns>
        public List<BEConcepto> Listar(BEConcepto pbe)
        {
            //DataSet ds = new DataSet();
            List<BEConcepto> lst = new List<BEConcepto>();
            
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_SEG_Concepto_Listar");
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                
                sqlDB.AddInParameter(dbCmd, "@ai_IdGrupo", DbType.Int32, pbe.IdGrupo);
                sqlDB.AddInParameter(dbCmd, "@as_CodigoConcepto", DbType.String, pbe.CodigoConcepto);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@ai_Pagina", DbType.Int32, pbe.Pagina);
                //ds = sqlDB.ExecuteDataSet(dbCmd);
                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        BEConcepto be = new BEConcepto
                        {
                            IdConcepto = DBValue.Get<Int32>(reader, "IdConcepto"),
                            IdGrupo = DBValue.Get<Int32>(reader, "IdGrupo"),
                            CodigoConcepto = DBValue.Get<String>(reader, "CodigoConcepto"),
                            Descripcion = DBValue.Get<String>(reader, "Descripcion"),
                            UsuarioModificacion = DBValue.Get<String>(reader, "UsuarioModificacion"),
                            FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion"),

                            Estado = DBValue.Get<String>(reader, "Estado"),
                            Fila = (Int32)DBValue.Get<Int64>(reader, "Fila"),
                            FilasXPagina = DBValue.Get<Int32>(reader, "FilasXPagina"),
                            TotalFilas = DBValue.Get<Int32>(reader, "TotalFilas")
                            
                            //RefAccion = DbTipoAccion.Actualizar
                        };
                        lst.Add(be);
                    }
                                    
                }

            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return lst;
        }


        /// <summary>
        /// Método obtiene Datos del Usuario
        /// <returns>Devuelve un DataSet</returns>
   
       public BEConcepto Obtener(BEConcepto pbe)
        {
            BEConcepto be = new BEConcepto();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_SEG_Concepto_Obtener");
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@ai_IdConcepto", DbType.Int32, pbe.IdConcepto);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdConcepto = DBValue.Get<Int32>(reader, "IdConcepto");
                        be.IdGrupo = DBValue.Get<Int32>(reader, "IdGrupo");
                        be.CodigoConcepto = DBValue.Get<String>(reader, "CodigoConcepto");
                        be.Descripcion = DBValue.Get<String>(reader, "Descripcion");
                        
                        be.Estado = DBValue.Get<String>(reader, "Estado");
                        be.UsuarioModificacion = DBValue.Get<String>(reader, "UsuarioModificacion");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        be.UsuarioCreacion = DBValue.Get<String>(reader, "UsuarioCreacion");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }



        /// <summary>
        /// Método Inserta un Nivel Alerta
        /// <returns>Devuelve una entidad</returns>
       public BEConcepto Insertar(BEConcepto pbe)
        {
            BEConcepto be = new BEConcepto();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_SEG_Concepto_Insertar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                
                sqlDB.AddInParameter(dbCmd, "@ai_IdGrupo", DbType.Int32, pbe.IdGrupo);
                sqlDB.AddInParameter(dbCmd, "@as_CodigoConcepto", DbType.String, pbe.CodigoConcepto);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
               
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioCreacion", DbType.String, pbe.UsuarioCreacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdConcepto = DBValue.Get<int>(reader, "IdConcepto");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }


        /// <summary>
        /// Método Actualiza un Nivel Alerta
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
       public BEConcepto Actualizar(BEConcepto pbe)
        {
            BEConcepto be = new BEConcepto();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_SEG_Concepto_Actualizar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                
                sqlDB.AddInParameter(dbCmd, "@ai_IdConcepto", DbType.Int32, pbe.IdConcepto);
                sqlDB.AddInParameter(dbCmd, "@ai_IdGrupo", DbType.Int32, pbe.IdGrupo);
                sqlDB.AddInParameter(dbCmd, "@as_CodigoConcepto", DbType.String, pbe.CodigoConcepto);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdConcepto = DBValue.Get<Int32>(reader, "IdConcepto");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }


        /// <summary>
        /// Método Actualiza el Estado Nivel Alerta
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
       public BEConcepto Eliminar(BEConcepto pbe)
        {
            BEConcepto be = new BEConcepto();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_SEG_Concepto_Eliminar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                //dbCmd.Transaction = Transaction.InnerDbTransaction; //Para administrar la transaccion
                //dbCmd.Connection = Transaction.Connection;  //Para administrar la conecion de la transaccion

                sqlDB.AddInParameter(dbCmd, "@ai_IdConcepto", DbType.Int32, pbe.IdConcepto);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdConcepto = DBValue.Get<Int32>(reader, "IdConcepto");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

       public BEConcepto Modificar(BEConcepto pbe)
       {
           //return _dl.Actualizar(pbe);
           BEConcepto be = null;
           if (pbe.RefAccion == BE.DbTipoAccion.Insertar)
           {
               be = Insertar(pbe);
           }
           else if (pbe.RefAccion == BE.DbTipoAccion.Actualizar)
           {
               be = Actualizar(pbe);
           }
           else if (pbe.RefAccion == BE.DbTipoAccion.Eliminar)
           {
               be = Eliminar(pbe);
           }
           return be;
       }

       /// <summary>
       /// Método obtiene los Conceptos con la informacion de usuarios asignados
       /// </summary>
       /// <returns>Devuelve un DataSet</returns>
       public DataSet ListarPorAsignacion(BEGrupo pbe)
       {
           DataSet ds = new DataSet();
           SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
           DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_SEG_Concepto_Listar_X_Asignacion");
           dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
           try
           {
               sqlDB.AddInParameter(dbCmd, "@ai_IdAplicacion", DbType.Int32, pbe.IdAplicacion);
               sqlDB.AddInParameter(dbCmd, "@ai_IdGrupo", DbType.Int32, pbe.IdGrupo);
               ds = sqlDB.ExecuteDataSet(dbCmd);
           }
           catch (Exception)
           {
               throw;
           }
           finally
           {
               dbCmd.Dispose();
           }
           return ds;
       }




        #endregion  Members
    }
}
